const str = `var mid = 1;

function getMid() {
  mid++;
  if (mid > 10000) {
    mid = 1;
  }
  return mid + "";
}

this.decode = function (msg) {
  //对msg进行解析，并返回物模型数据
  var content = msg.content;
  var topic = content.topic;
  var payload = content.payload;
  var identifier = topic.substring(topic.lastIndexOf("/") + 1);

  //透传上报
  if (topic.endsWith("/event/rawReport")) {
    var rst = component.transparentDecode(payload.params);
    if (!rst) {
      return null;
    }
    rst.occur = new Date().getTime();
    rst.time = new Date().getTime();
    return rst;
  }

  if (topic.endsWith("/property/post")) {
    //属性上报
    return {
      mid: msg.mid,
      productKey: msg.productKey,
      deviceName: msg.deviceName,
      type: "property",
      identifier: "report", //属性上报
      occur: new Date().getTime(), //时间戳，设备上的事件或数据产生的本地时间
      time: new Date().getTime(), //时间戳，消息上报时间
      data: payload.params,
    };
  } else if (topic.indexOf("/event/") > 0) {
    //事件上报
    return {
      mid: msg.mid,
      productKey: msg.productKey,
      deviceName: msg.deviceName,
      type: "event",
      identifier: identifier,
      occur: new Date().getTime(),
      time: new Date().getTime(),
      data: payload.params,
    };
  } else if (topic.endsWith("/service/property/set_reply")) {
    //属性设置回复
    return {
      mid: msg.mid,
      productKey: msg.productKey,
      deviceName: msg.deviceName,
      type: "property",
      identifier: identifier,
      occur: new Date().getTime(),
      time: new Date().getTime(),
      code: payload.code
    };
  } else if (topic.endsWith("/config/set_reply")) {
    //设备配置设置回复
    return {
      mid: msg.mid,
      productKey: msg.productKey,
      deviceName: msg.deviceName,
      type: "config",
      identifier: "set_reply",
      occur: new Date().getTime(),
      time: new Date().getTime(),
      code: payload.code
    };
  } else if (topic.endsWith("/config/get")) {
    //设备配置获取
    return {
      mid: msg.mid,
      productKey: msg.productKey,
      deviceName: msg.deviceName,
      type: "config",
      identifier: "get",
      occur: new Date().getTime(),
      time: new Date().getTime(),
      data: {},
    };
  } else if (topic.endsWith("_reply")) {
    //服务回复
    return {
      mid: msg.mid,
      productKey: msg.productKey,
      deviceName: msg.deviceName,
      type: "service",
      identifier: identifier,
      occur: new Date().getTime(),
      time: new Date().getTime(),
      code: payload.code,
      data: payload.data,
    };
  }
  return null;
};

this.encode = function (service, device) {
  var deviceMid = getMid();
  var method = "thing.service.";
  var topic = "/sys/" + service.productKey + "/" + service.deviceName + "/c/service/";
  var params = {};

  //透传下发
  if (device.transparent) {
    var rst = component.transparentEncode(service, device);
    topic = "/sys/" + rst.productKey + "/" + rst.deviceName + "/c/service/rawSend";
    params.model = rst.content.model;
    params.mac = rst.content.mac;
    params.data = rst.content.data;

    return {
      productKey: rst.productKey,
      deviceName: rst.deviceName,
      mid: rst.mid,
      content: {
        topic: topic,
        payload: JSON.stringify({
          id: rst.mid,
          method: method + "rawSend",
          params: params
        })
      }
    }

  }

  var type = service.type;
  var identifier = service.identifier;

  if (type == "property") {
    method += "property." + identifier;
    topic += "property/" + identifier;
  } else if (type == "service") {
    method += identifier;
    topic += identifier;
  } else if (type == "config") {
    //设备配置下发
    method += identifier;
    topic = "/sys/" + service.productKey + "/" + service.deviceName + "/c/config/" + identifier;
  }

  for (var p in service.params) {
    params[p] = service.params[p];
  }

  return {
    productKey: service.productKey,
    deviceName: service.deviceName,
    mid: deviceMid,
    content: {
      topic: topic,
      payload: JSON.stringify({
        id: deviceMid,
        method: method,
        params: params
      })
    }
  }
};`
export default str
